הרצאות 1-3 - אנליזה של אלגוריתמים, נוסחאות נסיגה
מודל ה-RAM:
-
נגדיר שפעולות מבוצעות אחת אחרי השניה, ללא פעולות מקבילות.
-
כל פעולה בסיסית לוקחת זמן קבוע - יחידת זמן אחת.
-
נגדיר את הפעולות הבסיסיות:
- פעולות מתמטיות (חיבור, חיסור, כפל וחילוק).
- השוואות (קטן, גדול, שווה, או שילוב).
- אופרטורים בוליאנים.
- קריאה וכתיבה לתא.
- שליטה (תנאי if, call, return).
- הגדרת תאים במערך.
- איתחול תא יחיד במערך.
-
דוגמא - ניתוח מיון הכנסה:
for j = 1 to A.length - 1
key <- A[j]
i <- j-1
while i >= 0 and A[j] > key
A[i+1] <- A[i]
i <- i-1
A[i+1] <- key
| cost | times |
|---|---|
| c1 | n |
| c2 | n-1 |
| c3 | n-1 |
| c4 | |
| c5 | |
| c6 | |
| c7 | n-1 |
- סך הפעולות (T(n)):
- המקרה הטוב ביותר:
- הוא כאשר המערך ממוין, ובו
עבור כל j. - זמן הריצה יהיה:
- הוא כאשר המערך ממוין, ובו
- המקרה הגרוע ביותר:
- הוא כאשר המערך ממוין הפוך , ובו
לכל j - נזכור ש:
וש - - זמן הריצה יהיה:
- הוא כאשר המערך ממוין הפוך , ובו
- המקרה הטוב ביותר:
- הערה: ניתוח האלגוריתמים הוא לא תלוי מחשב ומתעלם מהחומר אלא כמספר הפעולות האלמנטריות המבוצעות.
ריצה בשאיפה לאינסוף:
-
ניתוח זמן ריצה הוא אסימפטוטי, משמע מה זמן הריצה כתלות בקלט כאשר הקלט הוא n וגדל.
-
לכן, בשאיפה לאינסוף נוכל בביטויים מסוג
נוכל להזניח את bn ואת c ביחס ל -
סימון big O:
- נקרא גם חסם עליון
- משפחת O(g) הן משפחה של פונקציות שכולן גדלות כמו או פחות מ - g בשאיפה לאינסוף.
- פורמלית: פונקציה f היא חלק מהמשפחה אם קיימים קבועים חיוביים
כך ש: - כלומר, g גדול מ - f עד כדי הכפלה בקבוע החל ממקום מסוים.

- לדוגמא:
- ניתן לראות שהביטוי גדול מאפס.
- מכאן, שהתנאי מתקיים עבור
ו
-
סימון
: - נקרא גם חסם תחתון.
- משפחת
היא משפחת כל הפונקציות שגדלות לפחות באותה מהירות של g כאשר n מתקרב לאינסוף - פורמלית: פונקציה f היא חלק מהמשפחה אם קיימים קבועים חיוביים
כך ש: - כלומר, g קטנה מ f עד כדי הכפלה בקבוע החל ממקום מסוים.

- לדוגמא:
- מכאן, ניתן לראות שהתנאי מתקיים עבור
ועבור
-
סימון
: - נקרא גם חסם הדוק.
- משפחת כל הפונקציות שגדול כמו g כאשר n שואף לאינסוף.
- פורמלית: פונקציה f היא חלק מהמשפחה אם קיימים קבועים
כך ש: - כלומר, פונקציה יחיד g חוסמת את f מלמעלה ומלמטה עד כדי הכפלה בקבוע החל ממקום מסוים.

-
אינוטאיציות בסימונים אסימפטוטים:
- מיקום במשוואה:
- סימון בצד ימין של המשוואה משמע חלק מהמשפחה שלה.
- לדוגמא:
- לדוגמא:
- סימון בצד ימין משמעו פונקציה אנונימית כלשהיא.
- לדוגמא:
- לדוגמא:
- סימון בצד שמאל משמעו גם כן פונקציה אנונימת כלשהיא.
- לדוגמא:
משמעו שלכל פונקציה g(n) ב קיימת פונקציה f(n) ב כך שמתקיים:
- לדוגמא:
- סימון בצד ימין של המשוואה משמע חלק מהמשפחה שלה.
- התנהגויות:
- סימון O מתנהג כמו חסם עליון (
) - סימון
מתנהג כמו חסם תחתון ( ) - סימון
מתנהג כמו חסם הדוק (=)
- סימון O מתנהג כמו חסם עליון (
- ישנן פונקציות שאי אפשר להשוות ביניהן
- תכונות:
- טרנזטיביות:
- רפלקסיביות:
- סימטריה:
- טרנספוז סימטרי:
- טרנזטיביות:
- מיקום במשוואה:
נוסחאות נסיגה:
- נסיגה היא שיוויון או אי שיוויון של פונקציה שערכיה משתמשים בפונקציה אך עם קלט קטן יותר (סוג של רקורסיה).
-
לדוגמא:
- דרכים לפתור נוסחאות נסיגה:
- שיטת הניחוש:
- בשיטה זו מנחשים את הפתרון של נוסחאת הנסיגה ואז מוכיחים את הנכונות באינדוקציה.
- לדוגמא:
- הנסיגה:
- הניחוש:
- צעד הבסיס:
- צעד האינדוקציה: $$
\begin{gathered}
\text{Assume } T(m) = m \log m + m \text{ for all } m < n. \[15pt]
- הנסיגה:
- שיטת הניחוש:
\begin{aligned}
T(n) &= 2T(n/2) + n \
&= 2\left(\frac{n}{2} \log \frac{n}{2} + \frac{n}{2}\right) + n \quad \text{(by the induction hypothesis)} \
&= n \log \frac{n}{2} + n + n \
&= n \log n - n \log 2 + n + n \
&= n \log n - n + n + n \
&= n \log n + n
\end{aligned}
\end
\begin{gathered}
\begin{aligned}
T(n) &= T(n-1) + n \
&= T(n-2) + (n-1) + n \
&= T(n-3) + (n-2) + (n-1) + n \
&\quad \vdots \
&= T(n-k) + (n-k+1) + (n-k+2) + \dots + n \
&\quad \text{(proved using induction)} \
&= 1 + 2 + \dots + n \quad (\text{take } k = n - 1) \[10pt]
&= \frac{n(n+1)}{2}
\end{aligned}
\end
\begin{gathered}
T(n) = \begin{cases}
1 & \text{if } n = 1 \
T(n-1) + n & \text{if } n > 1
\end{cases} \[25pt]
T_2(n) = \begin{cases}
\color{red}{2} & \text{if } n = 1 \
T_2(n-1) + \color{red}{n + 2\sqrt{n}} & \text{if } n > 1
\end{cases} \[25pt]
\end
\begin{gathered}
\begin{aligned}
T_2(n) &= T_2(n-1) + n + 2\sqrt{n} \
&\overset{\text{i.h.}}{\leq} 3T(n-1) + n + 2\sqrt{n} \
&\leq 3T(n-1) + 3n \
&= 3T(n).
\end{aligned} \[25pt]
\end